/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Pantallas;

import Controladores.ControladorAsistencia;
import Controladores.ControladorMarcada;
import Controladores.ControladorUsuario;
import Entidades.Asistencia;
import Entidades.Empleado;
import Entidades.Usuario;
import Expertos.ConvertirFechas;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;

/**
 *
 * @author diego
 */
public class Logout extends javax.swing.JFrame {

    Controladores.ControladorLogin controladorLogin;
    Controladores.ControladorMarcada controladorMarcada = new ControladorMarcada();
    ControladorUsuario controladorUsuario = new ControladorUsuario();
    ControladorAsistencia controladorAsistencias = new ControladorAsistencia();
    Controladores.ControladorEmpleado controladorEmpleado;
    private String usuario;
    private String clave;
    private int exito = 0;
    private int resultado = 0;
    private Date hoysalida;
    private Usuario user = new Usuario();
    private Empleado empleadoLogout;
    private Empleado empleadoX;
    private Asistencia a = new Asistencia();
    private boolean marcoSalida;
    private boolean coincide;
    private Login login;
    //Panel para mostrar la huella digital
    private JPanel fingerprintViewPanel = null;
    //Imagen de la huella actual
    private BufferedImage fingerprintImage = null;

    public Logout() {
        this.marcoSalida = false;
        this.coincide = false;
        this.empleadoLogout = new Empleado();
        this.empleadoX = new Empleado();
        this.hoysalida = new Date();
        initComponents();
        inicializar();
        controladorEmpleado.inicializarCaptura();
        this.setLocationRelativeTo(null);
        this.setResizable(false);
        setVisible(true);
        botonSalida.setEnabled(false);
    }

    private void inicializar() {

        this.controladorEmpleado = new Controladores.ControladorEmpleado(this);
        this.panelHuella.add(this.crearPanelHuella());
    }

    /* Crea el panel que contendrá la imagen de la huella digital
     */
    private JComponent crearPanelHuella() {
        //Crea un panel nuevo para mostrar la huella
        fingerprintViewPanel = new JPanel() {
            //Se sobreescribe el método paintComponent para habilitar la muestra de la imagen de la huella
            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);

                //Si hay una imagen para ser mostrada
                if (fingerprintImage != null) {
                    //Calcula el tamaño y posición de la imagen para ser pintada
                    //el tamaño es ajustado para que ocupe todo el tamaño del panel
                    Insets insets = getInsets();
                    int transX = insets.left;
                    int transY = insets.top;
                    int width = getWidth() - getInsets().right - getInsets().left;
                    int height = getHeight() - getInsets().bottom - getInsets().top;
                    //Se dibuja la imagen
                    g.drawImage(fingerprintImage, transX, transY, width, height, null);
                    botonSalida.setEnabled(true);
                }

            }
        };

        //Se agrega un border alrededor del panel
        fingerprintViewPanel.setBorder(new CompoundBorder(
                new EmptyBorder(2, 2, 2, 2),
                new BevelBorder(BevelBorder.LOWERED)));

        fingerprintViewPanel.setToolTipText("Imagen de la última huella capturada.");

        if (fingerprintViewPanel == null) {
            return null;
        } else {

            return fingerprintViewPanel;
        }

    }

    public void showImage(BufferedImage image) {
        //Utiliza el imageProducer para crear una imagen de la huella digital
        fingerprintImage = image;
        //Se dibuja la nueva imagen
        repaint();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        botonSalida = new javax.swing.JButton();
        campoUsuario = new javax.swing.JTextField();
        labelUsuario = new javax.swing.JLabel();
        labelClave = new javax.swing.JLabel();
        labelLeyenda = new javax.swing.JLabel();
        campoClave = new javax.swing.JPasswordField();
        panelHuella = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Egreso Personal_ID");
        setBackground(new java.awt.Color(255, 255, 255));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        botonSalida.setText("Registrar Salida");
        botonSalida.setNextFocusableComponent(campoUsuario);
        botonSalida.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSalidaActionPerformed(evt);
            }
        });

        campoUsuario.setNextFocusableComponent(campoClave);
        campoUsuario.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                campoUsuarioKeyTyped(evt);
            }
        });

        labelUsuario.setText("Usuario:");

        labelClave.setText("Clave:");

        labelLeyenda.setForeground(new java.awt.Color(255, 0, 0));
        labelLeyenda.setText("Coloque el dedo en el escaner");

        campoClave.setToolTipText("en minúscula");
        campoClave.setNextFocusableComponent(botonSalida);
        campoClave.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                campoClaveMouseClicked(evt);
            }
        });

        panelHuella.setLayout(new java.awt.BorderLayout());

        jLabel1.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
        jLabel1.setText("Salida Sistema Personal ID");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(46, 46, 46)
                .addComponent(panelHuella, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(labelClave)
                            .addComponent(labelUsuario))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(campoClave, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(campoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(labelLeyenda))
                        .addGap(58, 58, 58)
                        .addComponent(botonSalida))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(20, 20, 20)
                        .addComponent(jLabel1)))
                .addContainerGap(44, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(46, 46, 46)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(campoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(labelUsuario))
                                .addGap(17, 17, 17)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(labelClave)
                                    .addComponent(campoClave, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(44, 44, 44)
                                .addComponent(botonSalida, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(labelLeyenda))
                    .addComponent(panelHuella, javax.swing.GroupLayout.PREFERRED_SIZE, 170, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(22, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void botonSalidaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSalidaActionPerformed
        usuario = campoUsuario.getText();
        clave = String.valueOf(campoClave.getPassword());
        exito = controladorUsuario.validarUsuario(usuario, clave);
        empleadoLogout = Login.empleadoLogin;
        // si usuario y clave estan vacios
        if (usuario.isEmpty() && controladorEmpleado.levanto) {
            empleadoX = controladorEmpleado.identificarPersona();
            if (empleadoLogout.equals(empleadoX)) {
                exito = 0;
                usuario = empleadoX.getUsuario2().getNombreUsuario();
                System.out.println("Se logueo por huella");
            } else {
                exito = 3;
            }
        }
        if (usuario.isEmpty() && empleadoX == null) {
            exito = 3;
        }
        if(!empleadoLogout.getUsuario2().getNombreUsuario().equalsIgnoreCase(usuario)) {
            exito = 3;
        }
        switch (exito) {
            case 0:
                controladorEmpleado.finalizarCaptura();
                System.out.println("Exito: " + exito);
                //////Generar la Marcada por el exito del Login
                controladorMarcada.marcar(hoysalida, hoysalida, empleadoLogout, empleadoLogout.getIdOficina().getEscanerHuellas().get(0));
                //// REGISTRAR ASISTENCIA CON LA MARCADA
                List<Asistencia> asistenciaLista = empleadoLogout.getAsistenciaLista();
                Calendar fechaSalida = Calendar.getInstance();
                fechaSalida.setTime(hoysalida);
                Calendar asistenciaEntrada = Calendar.getInstance();
                for (Asistencia asistencia : asistenciaLista) {
                    asistenciaEntrada.setTime(asistencia.getFechaEntradaAsistencia());
                    if (ConvertirFechas.fechaAString(asistencia.getFechaEntradaAsistencia()).equals(ConvertirFechas.fechaAString(hoysalida))) {
                        if (asistencia.getFechaSalidaAsistencia() != null) {
                            marcoSalida = true;
                            System.out.println("Ya marco salida");
                            System.exit(1);
                        } else {
                            resultado = JOptionPane.showOptionDialog(null, "Desea marcar salida, " + empleadoLogout.getNombre() + " " + empleadoLogout.getApellido() + "?", "Registrar Asistencia", 2, 1, null, null, null);
                            if (resultado == JOptionPane.OK_OPTION) {
                                ////Grabar en BD la fecha de salida y salir del sistema
                                asistencia.setFechaSalidaAsistencia(hoysalida);
                                asistencia.setHsSalida(hoysalida);
                                this.setVisible(false);
                                ExitoLoginout cartelExito = new ExitoLoginout(this, true, "Asistencia registrada con éxito!!");
                                controladorAsistencias.cargarSalida(asistencia);
                            }
                            System.exit(1);
                        }
                    }
                }

                if (resultado == JOptionPane.OK_CANCEL_OPTION) {
                    System.exit(1);
                }
                break;
            case 1:
                JOptionPane.showMessageDialog(null, "Contraseña incorrecta", "Salida del Sistema", 2);
                break;
            case 3:
                JOptionPane.showMessageDialog(null, "Usuario no valido. Asegurese de ser el mismo usuario que ingreso al sistema. Coloque nuevamente el dedo en el escaner o escriba usuario y contraseña", "Salida del Sistema", 0);
                break;
        }
    }//GEN-LAST:event_botonSalidaActionPerformed

    private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated
    }//GEN-LAST:event_formWindowActivated

    private void campoClaveMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_campoClaveMouseClicked
        botonSalida.setEnabled(true);
    }//GEN-LAST:event_campoClaveMouseClicked

    private void campoUsuarioKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_campoUsuarioKeyTyped
        botonSalida.setEnabled(true);
    }//GEN-LAST:event_campoUsuarioKeyTyped

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
        resultado = JOptionPane.showOptionDialog(null, "¿Desea salir sin registrar asistencia?", "Registrar Asistencia", 2, 1, null, null, null);
        if (resultado == JOptionPane.OK_OPTION) {
            controladorEmpleado.finalizarCaptura();
            System.exit(0);
        }
        if (resultado == JOptionPane.OK_CANCEL_OPTION) {
            setDefaultCloseOperation(Logout.DO_NOTHING_ON_CLOSE);
        }
    }//GEN-LAST:event_formWindowClosing
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonSalida;
    private javax.swing.JPasswordField campoClave;
    private javax.swing.JTextField campoUsuario;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel labelClave;
    private javax.swing.JLabel labelLeyenda;
    private javax.swing.JLabel labelUsuario;
    private javax.swing.JPanel panelHuella;
    // End of variables declaration//GEN-END:variables

    public JTextField getCampoClave() {
        return campoClave;
    }

    public void setCampoClave(JPasswordField campoClave) {
        this.campoClave = campoClave;
    }

    public JLabel getLabelClave() {
        return labelClave;
    }

    public void setLabelClave(JLabel labelClave) {
        this.labelClave = labelClave;
    }

    public JLabel getLabelLeyenda() {
        return labelLeyenda;
    }

    public void setLabelLeyenda(JLabel labelLeyenda) {
        this.labelLeyenda = labelLeyenda;
    }

    public JLabel getLabelUsuario() {
        return labelUsuario;
    }

    public void setLabelUsuario(JLabel labelUsuario) {
        this.labelUsuario = labelUsuario;
    }

    public JButton getBotonIngresar() {
        return botonSalida;
    }

    public void setBotonIngresar(JButton botonIngresar) {
        this.botonSalida = botonIngresar;
    }

    public JTextField getCampoLogin() {
        return campoClave;
    }

    public void setCampoLogin(JPasswordField campoLogin) {
        this.campoClave = campoLogin;
    }

    public JTextField getCampoUsuario() {
        return campoUsuario;
    }

    public void setCampoUsuario(JTextField campoUsuario) {
        this.campoUsuario = campoUsuario;
    }
}
